package com.zkthink.ceres.pay.wechat.v3.service.ecommerce;

import com.zkthink.ceres.pay.wechat.v3.entity.request.subsidies.CancelSubsidiesRequest;
import com.zkthink.ceres.pay.wechat.v3.entity.request.subsidies.CreateSubsidiesRequest;
import com.zkthink.ceres.pay.wechat.v3.entity.request.subsidies.ReturnSubsidiesRequest;
import com.zkthink.ceres.pay.wechat.v3.entity.result.subsidies.CancelSubsidiesResult;
import com.zkthink.ceres.pay.wechat.v3.entity.result.subsidies.CreateSubsidiesResult;
import com.zkthink.ceres.pay.wechat.v3.entity.result.subsidies.ReturnSubsidiesResult;

/**
 * <p>
 * 请求补差API
 * 服务商下单的时候带上补差标识，微信订单支付成功并结算完成后，发起分账前，调用该口进行补差。
 * 提供电商服务商向二级商户补差转账的资金产品能力。
 * <p>
 * 电商平台下单时传入补差金额，详见【合单下单API】文档中补差字段说明。
 * 在发起分账前，调用该接口进行补差。
 * 补差金额需要和下单的时候传入的补差金额保持一致(发生用户退款时可以小于下单时的补差金额，须有对应的微信退款单号，任意一笔该订单的微信退款单)。
 * 该接口支持重入，请求参数相同只会扣款一次，重入有效期180天。
 * 系统异常（如返回SYSTEM_ERROR），请使用相同参数稍后重新调用，请务必用原参数来重入此接口，如更换金额重试，可能会导致重复扣款，系统会在1天后回退到原账户。
 * </p>
 *
 * @author vivi.huang
 * @since 2020/6/16
 */
public interface SubsidiesService {

    /**
     * 请求补差API
     * 服务商下单的时候带上补差标识，微信订单支付成功并结算完成后，发起分账前，调用该口进行补差。
     * @param createSubsidiesRequest
     * @return
     */
   CreateSubsidiesResult createSubsidies(CreateSubsidiesRequest createSubsidiesRequest);

    /**
     * 请求补差回退API
     * 订单发送退款的时候，可以对补贴成功的补差单发起回退。
     * @param returnSubsidiesRequest
     * @return
     */
   ReturnSubsidiesResult returnSubsidies(ReturnSubsidiesRequest returnSubsidiesRequest);

    /**
     * 取消补差API
     * @param cancelSubsidiesRequest
     * @return
     */
   CancelSubsidiesResult cancelSubsidies(CancelSubsidiesRequest cancelSubsidiesRequest);
}